翻訳と辞書
Words near each other
・ Starting Over (レミオロメンの曲)
・ Starting Over (中西圭三のアルバム)
・ Starting Over (和田光司の曲)
・ Starting Over (奥井雅美の曲)
・ Starting over (三代目J Soul Brothers from EXILE TRIBEの曲)
・ Start→
・ Star☆T
・ Star☆drops
・ Star☆tin'
・ Starプロファイル
State パターン
・ Stay (Fayrayの曲)
・ Stay Free (稲葉浩志の曲)
・ Stay Gold (Steady&Co.の曲)
・ Stay With Me (堀江由衣の曲)
・ Stay With Me (平井堅の曲)
・ Stay With You (星村麻衣の曲)
・ Stay as a Friend -友達のままで-
・ Stay as a Friend-友達のままで-
・ Stay as a Friend-友達のままで- (PERSONZ)


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

State パターン : ウィキペディア日本語版
State パターン

State パターン(、ステート・パターン)とは、プログラミングで用いられる デザインパターンの一種である。このパターンはオブジェクトの状態(state)を表現するために用いられる。ランタイムでそのタイプを部分的に変化させるオブジェクトを扱うクリーンな手段となる〔 (エリック・ガンマラルフ・ジョンソンリチャード・ヘルムジョン・ブリシディース(著)、グラディ・ブーチ(まえがき)、本位田真一、吉田和樹(監訳)、『オブジェクト指向における再利用のためのデザインパターン』、ソフトバンクパブリッシング、1995年。ISBN 978-4797311129)〕。
== 擬似コードによる例 ==
ドローソフトを例に取る。このプログラムは任意の時点においてさまざまなツールのうちの1つとして振る舞うマウスカーソルを持つ。複数のカーソルオブジェクトを切り替える代わりに、カーソルは現在使用されているツールを表す内部的な状態を保持する。(例えばマウスクリックの結果として)ツールに依存するメソッドが呼ばれると、メソッド呼び出しはカーソルの状態へと渡される。
各ツールは1つの状態に対応している。共有される抽象状態クラスはAbstractToolである——

class AbstractTool is
function moveTo(point) is
input: the location ''point'' the mouse moved to
''(this function must be implemented by subclasses)''

function mouseDown(point) is
input: the location ''point'' the mouse is at
''(this function must be implemented by subclasses)''

function mouseUp(point) is
input: the location ''point'' the mouse is at
''(this function must be implemented by subclasses)''
この定義により、各ツールはマウスカーソルの移動およびクリック/ドラッグの開始と終了を扱わなければならない。
その基底クラスを用い、単純なペンと範囲選択の各ツールはこのようになる——
subclass PenTool of AbstractTool is
last_mouse_position := invalid
mouse_button := up

function moveTo(point) is
input: the location ''point'' the mouse moved to
if mouse_button = down
''(draw a line from the ''last_mouse_position'' to ''point'')''
last_mouse_position := point

function mouseDown(point) is
input: the location ''point'' the mouse is at
mouse_button := down
last_mouse_position := point

function mouseUp(point) is
input: the location ''point'' the mouse is at
mouse_button := up


subclass SelectionTool of AbstractTool is
selection_start := invalid
mouse_button := up

function moveTo(point) is
input: the location ''point'' the mouse moved to
if mouse_button = down
''(select the rectangle between ''selection_start'' and ''point'')''

function mouseDown(point) is
input: the location ''point'' the mouse is at
mouse_button := down
selection_start := point

function mouseUp(point) is
input: the location ''point'' the mouse is at
mouse_button := up
この例では、コンテキストのためのクラスはCursorと呼ばれている。抽象状態クラス(この場合AbstractTool)で名付けられたメソッド群はコンテキストにおいても実装されている。コンテキストクラスではこれらのメソッドは、current_toolにより表される現在の状態の、対応するメソッドを呼び出す。
class Cursor is
current_tool := new PenTool

function moveTo(point) is
input: the location ''point'' the mouse moved to
current_tool.moveTo(point)

function mouseDown(point) is
input: the location ''point'' the mouse is at
current_tool.mouseDown(point)

function mouseUp(point) is
input: the location ''point'' the mouse is at
current_tool.mouseUp(point)

function usePenTool() is
current_tool := new PenTool

function useSelectionTool() is
current_tool := new SelectionTool
Cursorオブジェクトが、適切なメソッド呼び出しをアクティブとなっているツールへと渡すことにより、異なる時点においてPenToolとSelectionToolのどちらとしてでも振舞えるのである。これがStateパターンの本質である。この場合では、PenCursorクラスとSelectCursorクラスを作ることで状態とオブジェクトを結合することも可能であり、単なる継承へと単純化できたであろうが、実践においては新しいツールが選択される毎に新しいオブジェクトへとコピーするにはコストがかかりすぎたりエレガントでなかったりするようなデータをCursorが保持していることもあるであろう。

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「State パターン」の詳細全文を読む



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.